/*====================================================================================================*/
/*====================================================================================================*/
#include "nrf51_system.h"
#include "nrf51_uart.h"
#include "module_rs232.h"
/*====================================================================================================*/
/*====================================================================================================*/
#define UARTx_TXD_PIN       9
#define UARTx_RXD_PIN       11
#define UARTx_RTS_PIN       0
#define UARTx_CTS_PIN       0

#define UARTx               NRF_UART0
#define UARTx_BAUDRATE      UART_BAUDRATE_BAUDRATE_Baud115200
#define UARTx_PARITY        UART_CONFIG_PARITY_Excluded
#define UARTx_HARDWARECTRL  UART_CONFIG_HWFC_Disabled
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_Config
**功能 : RS232 配置
**輸入 : None
**輸出 : None
**使用 : RS232_Config();
**====================================================================================================*/
/*====================================================================================================*/
void RS232_Config( void )
{
  UART_InitTypeDef UART_InitStruct;

  UART_InitStruct.UART_PinTXD              = UARTx_TXD_PIN;
  UART_InitStruct.UART_PinRXD              = UARTx_RXD_PIN;
  UART_InitStruct.UART_PinRTS              = UARTx_RTS_PIN;
  UART_InitStruct.UART_PinCTS              = UARTx_CTS_PIN;
  UART_InitStruct.UART_BaudRate            = UARTx_BAUDRATE;
  UART_InitStruct.UART_Parity              = UARTx_PARITY;
  UART_InitStruct.UART_HardwareFlowControl = UARTx_HARDWARECTRL;
  UART_Init(UARTx, &UART_InitStruct);
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_SendStr
**功能 : 發送字串
**輸入 : *pWord
**輸出 : None
**使用 : RS232_SendStr((int8_t*)"Hello World!");
**====================================================================================================*/
/*====================================================================================================*/
void RS232_SendStr( int8_t *pWord )
{
  while(*pWord != '\0') {
    UART_SendByte(UARTx, pWord);
    pWord++;
  }
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_SendNum
**功能 : 將數值轉字串發送
**輸入 : Type, NumLen, SendData
**輸出 : None
**使用 : RS232_SendNum(Type_O, 6, 1024);
**====================================================================================================*/
/*====================================================================================================*/
void RS232_SendNum( StrType Type, uint8_t NumLen, int32_t SendData )
{
  int8_t TrData[32] = {0};
  int8_t *pWord = TrData;

  Str_NumToChar(Type, NumLen, TrData, SendData);

  while(*pWord != '\0') {
    UART_SendByte(UARTx, pWord);
    pWord++;
  }
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_SendData
**功能 : 發送資料
**輸入 : *SendData, DataLen
**輸出 : None
**使用 : RS232_SendData(SendData, DataLen);
**====================================================================================================*/
/*====================================================================================================*/
void RS232_SendData( int8_t *SendData, uint16_t DataLen )
{
  UART_SendData(UARTx, SendData, DataLen);
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_RecvStr
**功能 : 接收字串
**輸入 : *pWord
**輸出 : None
**使用 : RS232_RecvStr(RecvStirng);
**====================================================================================================*/
/*====================================================================================================*/
void RS232_RecvStr( int8_t *pWord )
{
  do {
    UART_RecvByte(UARTx, pWord++);
  } while(*(pWord-1) != '\0');
  *pWord = '\0';
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_RecvStrWTO
**功能 : 接收字串, 並加入 Timeout 功能
**輸入 : *pWord, TimeoutMs
**輸出 : State
**使用 : RS232_RecvStrWTO(RecvStirng, 200);
**====================================================================================================*/
/*====================================================================================================*/
int8_t RS232_RecvStrWTO( int8_t *pWord, int32_t TimeoutMs )
{
  int8_t State = ERROR;

  do {
    State = UART_RecvByteWTO(UARTx, pWord++, TimeoutMs);
    if(State == ERROR)
      return ERROR;
  } while(*(pWord-1) != '\0');
  *pWord = '\0';

  return SUCCESS;
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_RecvData
**功能 : 接收資料
**輸入 : *RecvData, DataLen
**輸出 : None
**使用 : RS232_RecvData(RecvData, DataLen);
**====================================================================================================*/
/*====================================================================================================*/
void RS232_RecvData( int8_t *RecvData, uint16_t DataLen )
{
  UART_RecvData(UARTx, RecvData, DataLen);
}
/*====================================================================================================*/
/*====================================================================================================*
**函數 : RS232_RecvDataWTO
**功能 : 接收資料, 並加入 Timeout 功能
**輸入 : *RecvData, DataLen, TimeoutMs
**輸出 : State
**使用 : RS232_RecvDataWTO(RecvData, DataLen, 200);
**====================================================================================================*/
/*====================================================================================================*/
int8_t RS232_RecvDataWTO( int8_t *RecvData, uint16_t DataLen, int32_t TimeoutMs )
{
  return UART_RecvDataWTO(UARTx, RecvData, DataLen, TimeoutMs);
}
/*====================================================================================================*/
/*====================================================================================================*/
